package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEmpSocInfoDAO;
import org.jsola.hr.dto.EmpSocPlanAttachDTO;
import org.jsola.hr.dto.EmpSocPlanBatchAddDTO;
import org.jsola.hr.dto.IncreaseDecreaseUpdateDTO;
import org.jsola.hr.entity.EmpSocInfoDO;
import org.jsola.hr.query.EmpSocInfoQuery;
import org.jsola.hr.query.IncreaseDecreaseQuery;
import org.jsola.hr.vo.CheckDecreaseFailVO;
import org.jsola.hr.vo.EmpSocInfoListVO;
import org.jsola.hr.vo.JfEmpSocInfoVO;
import org.jsola.hr.vo.JfStatisticsAnalyseVO;
import org.jsola.user.core.TokenUser;

import java.util.List;

/**
 * 员工参保信息表
 *
 * @author zhr
 */
public interface IEmpSocInfoExtraService extends IService<IEmpSocInfoDAO, EmpSocInfoDO> {

    /**
     * 查询租户是否开启确认增减员
     *
     * @param tokenUser 当前用户
     * @return 当前用户
     */
    String getConfirmSocBySite(TokenUser tokenUser);

    /**
     * 查询增减员确认附件是否校验
     *
     * @param tokenUser 当前用户
     * @return 当前用户
     */
    String getAnnexVerifyBySite(TokenUser tokenUser);

    /**
     * 查询增减员确认附件是否校验
     *
     * @param tokenUser 当前用户
     * @return 当前用户
     */
    String getRemarkVerifyBySite(TokenUser tokenUser);

    /**
     * 取消减员
     *
     * @param planId    计划Id
     * @param tokenUser 当前用户
     */
    void cancelDecrease(String planId, TokenUser tokenUser);

    /**
     * 取消增员
     *
     * @param planId    计划Id
     * @param tokenUser 当前用户
     */
    void cancelIncrement(String planId, TokenUser tokenUser);

    /**
     * 增员(需要确认)
     *
     * @param batchIncreaseDTO 增员参数
     * @param tokenUser        当前用户
     * @return 增员结果
     */
    String increaseExtra(EmpSocPlanBatchAddDTO batchIncreaseDTO, TokenUser tokenUser);

    /**
     * 增员编辑
     *
     * @param increaseUpdate 编辑参数
     * @param tokenUser      当前用户
     */
    void increaseUpdateExtra(IncreaseDecreaseUpdateDTO increaseUpdate, TokenUser tokenUser);

    /**
     * 增员反馈
     *
     * @param empSocPlanAttachDTO 反馈参数
     * @param tokenUser           当前用户
     */
    void increaseFeedbackExtra(EmpSocPlanAttachDTO empSocPlanAttachDTO, TokenUser tokenUser);

    /**
     * 减员(需要确认)
     *
     * @param decreaseQuery 减员参数
     * @param tokenUser     当前用户
     * @return 减员结果
     */
    List<CheckDecreaseFailVO> decreaseExtra(IncreaseDecreaseQuery decreaseQuery, TokenUser tokenUser);

    /**
     * 减员编辑
     *
     * @param decreaseUpdate 编辑参数
     * @param tokenUser      当前用户
     */
    void decreaseUpdateExtra(IncreaseDecreaseUpdateDTO decreaseUpdate, TokenUser tokenUser);

    /**
     * 减员反馈
     *
     * @param empSocPlanAttachDTO 反馈参数
     * @param tokenUser           当前用户
     */
    void decreaseFeedbackExtra(EmpSocPlanAttachDTO empSocPlanAttachDTO, TokenUser tokenUser);

    /**
     * 甲方端社保详情
     *
     * @param empId     员工Id
     * @param tokenUser 当前用户
     * @return 社保详情
     */
    JfEmpSocInfoVO jfEmpSocInfo(String empId, TokenUser tokenUser);

    /**
     * 甲方端社保列表页
     *
     * @param empSocInfoQuery 查询参数
     * @param tokenUser       当前用户
     * @return 社保列表
     */
    Page<EmpSocInfoListVO> jfEmpSocInfoList(EmpSocInfoQuery empSocInfoQuery, TokenUser tokenUser);

    /**
     * 甲方端社保统计分析
     *
     * @param empSocInfoQuery 查询参数
     * @param tokenUser       当前用户
     * @return 统计分析
     */
    JfStatisticsAnalyseVO jfStatisticsAnalyseSoc(EmpSocInfoQuery empSocInfoQuery, TokenUser tokenUser);
}